function myNew(fn, ...args) {
    // 1.创建一个实例对象
    let obj = {}

    // 2.生成的实例对象继承构造函数原型
    obj.__proto__ = fn.prototype

    // 或
    // obj = Object.create(fn.prototype)

    // 3.改变构造函数this指向为实例对象
    let result = fn.call(obj, ...args)

    // 4.如果构造函数执行的结果返回的是一个对象或者函数，那么返回这个对象或函数
    if((result && typeof result == 'object') || typeof result == 'function') {
        return result
    }
    return obj
}

function Add(a, b) {
    return this.min = (a, b) => {
        console.log(Math.min(a, b));
    }
    console.log(a+b);
}

let add = myNew(Add, 1, 2)
add(1, 2)

let promise = new Promise((resolve, reject) => {
    reject(123)
})

promise.then(console.log(123), 123)